package edu.gatech.cs2340.teamrocket.model.pokemon.ailments;

import edu.gatech.cs2340.teamrocket.model.pokemon.Pokemon;
import java.io.Serializable;

/**
 * Represents a status ailment for Pokemon.
 *
 * @author Joe Tacheron
 */
public interface Ailment extends Serializable {

    /**
     * Affect the Pokemon for the turn.
     *
     * @param t the Pokemon to affect
     * @return any updates that occurred
     */
    String affect(Pokemon t);

    /**
     * @param t the Pokemon this ailment is affecting.
     * @return a String indicating the Pokemon caught this ailment.
     */
    String catchMessage(Pokemon t);

    /**
     * @param t the Pokemon this ailment is affecting.
     * @return a String indicating the Pokemon has healed from this ailment.
     */
    String healMessage(Pokemon t);

    /**
     * @param t the Pokemon this ailment is affecting.
     * @return a String indicating the Pokemon fainted from this ailment.
     */
    String faintMessage(Pokemon t);

    /**
     * @param t the Pokemon this ailment is affecting.
     * @return a String indicating the Pokemon has been hurt from this ailment.
     */
    String hurtMessage(Pokemon t);

    /**
     *
     * @return true if this Ailment is healed by a FullHeal, false otherwise.
     */
    boolean healedByFullHeal();

    /**
     * @return an HTML-formatting 3-letter String name of this ailment.
     */
    String statusString();
}
